import numpy as np import pandas as pd from pandas_datareader import data as wb import matplotlib.pyplot as plt from scipy.stats import norm ticker = 'TSLA' data = pd.DataFrame() #can import stock returns here data[ticker] = wb.DataReader(ticker, data_source = 'yahoo', start = '2020-1-1', end = '2020-12-31')['Adj Close'] #Plot data.plot(figsize=(15,6)) log_returns = np.log(1 + data.pct_change()) u = log_returns.mean() var = log_returns.var() drift = u - (0.5*var) stdev = log_returns.std() days = 365 trials = 100 #can be modified with initial value of stock Z = norm.ppf(np.random.rand(days, trials)) #days, trials daily_returns = np.exp(drift.values + stdev.values * Z) price_paths = np.zeros_like(daily_returns) price_paths[0] = ##data.iloc[-1] for t in range(1, days): price_paths[t] = price_paths[t-1]*daily_returns[t] plt.figure(figsize=(10,6)) plt.title("1 Year Monte Carlo simulation for " + ticker) plt.ylabel("Price (P)") plt.xlabel("Time (Days)") plt.plot(price_paths) plt.show() fname=r'C:\Users\XXXX\MonteCarlosimu.pdf' plt.savefig(fname) df = pd.DataFrame(price_paths) df.to_excel(r'C:\Users\XXXXE\MonteCarlosimu.xls')